#ifndef ALTMAPPLUGIN_H
#define ALTMAPPLUGIN_H

#include "altplugin.h"

#include <QStringList>

namespace Alt {
     class Map;

     /*! Base class for all map plugins. A map plugin provides one or more types of maps.
          In order for MapPlugin subclasses to be loaded, they must also subclass Plugin. */
     class MapPlugin : public virtual Plugin {
     public:
          /*! Creates a map of the specified type.
               If a type that is not supported is passed, a null pointer should be returned.
               The caller will take ownership of the created map.
               \param type The type of map to be created.
               \return The created map. */
          virtual Map* createMap(const QString& type) const = 0;

          virtual QString pluginDescription() const = 0;

          virtual QString pluginName() const = 0;

          /*! The types of maps this plugin provides. */
          virtual QStringList mapTypes() const = 0;
     };
}

Q_DECLARE_INTERFACE(Alt::MapPlugin, "com.herenbdy.Alt.AltMapPlugin/0.1.0")

#endif
